package com.harry.home.wordpicture.Fragment;

import android.app.Service;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;


import com.harry.home.wordpicture.R;


public class SearchFragment extends Fragment {
    //窗口级别的由windowsManager统一管理（浮动窗口）
    private PopupWindow popupWindow;
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        popupWindow = new PopupWindow();
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_search,container,false);
    }
    //实现浮动框的弹出，输入法的动态调用

    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        final LinearLayout llayout = (LinearLayout) view.findViewById(R.id.ll);
        final Toolbar toolbar = (Toolbar) view.findViewById(R.id.tb);
        llayout.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //弹出浮动框
                //封装代码 （以Linearlayout作为参照，所以作为入参传入）
                showPopUpWindow(llayout,toolbar);
                //弹出输入法  输入法系统服务
                InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Service.INPUT_METHOD_SERVICE);
                //如果当前没有显示软输入法键盘可以显示
                //第一个参数：显示的flag
                //第二个参数：隐藏的flag
                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS);
            }
        });
    }
    /**
     * 需要封装的方法，在封装中不实例化，保持popWindows的唯一性
     */
    private void showPopUpWindow(LinearLayout llayout, Toolbar toolbar){
        //判断当前popupwindow有没有显示
        if (!popupWindow.isShowing()){
            //进行实际的显示
            //就是设置popupwindow的属性宽度和高度的属性必须填写否则看不到视图效果
            //就是toolbar的宽度和高度
            popupWindow.setWidth(toolbar.getWidth());
            popupWindow.setHeight(toolbar.getHeight());
            //设置popupWindow自己的视图
            //自定义layout。XML通过填充器调用转换View就可以了
            View v = getActivity().getLayoutInflater().inflate(R.layout.popupwindow,null);
            TextView tv = (TextView) v.findViewById(R.id.tv1);
            tv.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //认为取消浮动窗口
                    popupWindow.dismiss();
                }
            });
            popupWindow.setContentView(v);
            popupWindow.setFocusable(true); //设置popWindow的获取焦点
            popupWindow.setOutsideTouchable(true); //可以点击popupwidow的外部,点击以后可以消除popupwindow
            //需要通过show的方法显示(通过Gravity和x,y结合设置到符合要求的位置显示)
            //重新设置Background去除点击外部触摸不能消除popupwindow的bug
            popupWindow.setBackgroundDrawable(new BitmapDrawable());
            //一般的情况下y可以进行偏移的操作
            popupWindow.showAtLocation(llayout, Gravity.TOP,0,getStatusHeight());  //Y只要偏移状态栏的高度就可以了
        }
    }
    /**
     *  获取状态栏的高度
     *  1.getResource通过地址的方式
     *  2.通过反射的方式也可以获取
     */

    public int getStatusHeight() {
        int height = 0;
        int resId;
      //获取状态栏变量对应的地址
        //1.先通过变量名找地址,通过地址取地址的内容
        //因为status_bar_height是私有的,无法直接获取内容(移动一个状态栏的高度)
        resId = getResources().getIdentifier("status_bar_height","dimen","android");
        //String packageName = context.getPackageName();
        //int resIdDrawable = getResources().getIdentifier("ic_launcher","drawable",packageName);
        if(resId > 0){
            //通过地址获取高度
            height = getResources().getDimensionPixelOffset(resId);
        }
        return height;
    }
}
